package com.heihei.serviceimpl.localres;

import com.heihei.common.response.ResponseVO;
import com.heihei.entity.localres.LocalResEntity;
import com.heihei.enums.localres.FileTypeEnum;
import com.heihei.service.localres.LocalResService;
import com.heihei.utils.FileUtilsF;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.*;

/**
 *  本地资源
 *
 * @author duanhengfei
 * 2021年12月27日 19:20:32
 */
@Service
public class LocalResServiceImpl implements LocalResService {

    @Value("${local-res.root-path}")
    private String ROOT_PATH;

    private File rootFile;

    /**
     * 列表查询（查询文件子节点）
     *
     * @author duanhengfei
     * 2021年12月28日 21:16:49
     */
    @Override
    public ResponseVO<List<LocalResEntity>> listFiles(String currPath) {
        File file = new File(this.getRootFile(), currPath);
        if(!file.isDirectory()) {
            return ResponseVO.paramIllegal("文件不能访问其子节点");
        }
        File[] listFiles = file.listFiles();
        List<LocalResEntity> resultList = new ArrayList<>();
        for (File childFile : listFiles) {
            LocalResEntity entity = this.transFile2LocalRes(childFile);
            resultList.add(entity);
        }
        //排序
        Collections.sort(resultList, new Comparator<LocalResEntity>() {
            @Override
            public int compare(LocalResEntity o1, LocalResEntity o2) {
                int firstDiff = o1.getFileTypeFlag() - o2.getFileTypeFlag();
                if(firstDiff != 0) {
                    return firstDiff;
                }
                int secondDiff = o1.getName().compareTo(o2.getName());
                return secondDiff;
            }
        });
        return ResponseVO.dealSuccess(resultList);
    }

    /**
     * 将文件转换为对应entity对象
     *
     * @author duanhengfei
     * 2021年12月28日 21:21:34
     */
    private LocalResEntity transFile2LocalRes(File file) {
        LocalResEntity entity = new LocalResEntity();
        entity.setName(file.getName());
        String relativePath = FileUtilsF.getRelativePath(file, this.getRootFile());
        if(StringUtils.isNotEmpty(relativePath)) {
            relativePath = relativePath.replaceAll("\\\\", "/");
        }
        entity.setUrlAbsPath(relativePath);
        entity.setFileTypeFlag(FileTypeEnum.getFileType(file));
        entity.setFileTypeDescription(FileTypeEnum.getDescriptionByKey(entity.getFileTypeFlag()));
        entity.setFileTypeIconKey(FileTypeEnum.getIconByKey(entity.getFileTypeFlag()));
        if(!Objects.isNull(file) && !file.isDirectory()) {
            //单位是字节
            entity.setFileSize(file.length());
        }
        return entity;
    }

    /**
     * 获取跟路径
     *
     * @author duanhengfei
     * 2021年12月29日 00:28:32
     */
    public File getRootFile() {
        if(Objects.isNull(this.rootFile)) {
            rootFile = new File(this.ROOT_PATH);
        }
        return rootFile;
    }


}
